package cn.tedu.oop;
/*本类用作多态回顾*/
public class TestDemo {
    public static void main(String[] args) {
        //6.创建"纯纯的"对象用于测试
        Animal a = new Animal(); //前后一直, 类名=类名
        Cat c = new Cat();
        Dog d = new Dog();
        a.eat();//吃啥都行,调用的是父类自己的方法
        c.eat();//小鱼干,调用的是子类重写后的方法
        d.eat();//肉骨头,调用的是子类重写后的方法
        /*父类不能调用子类的特有功能*/
        //a.jump();//Animal类里没有这个方法,这是子类小猫的
        //a.run();//Animal类里没有这个方法,这是子类小狗的
        c.jump();
        d.run();

        //7.创建多态对象进行测试
        /*口诀1:父类引用指向(执行就是保存地址值)子类对象
         * 口诀2:编译看左边,运行看右边*/
        Animal a2 = new Cat();
        Animal a3 = new Dog();
        a2.eat();//小鱼干
        a3.eat();//肉骨头
        //a2.jump();//多态对象把自己看做是父类类型,父类没有定义这个功能(不同业务场景,不同方法技巧)(不是纯纯对象)

        //a3.run();//多态对象可以使用父类的属性 方法
    }
}
//多态的前提:继承+重写
//1.创建父类
class Animal{
    //3.创建父类的普通方法
    public void eat(){
        System.out.println("吃啥都行!");
    }
}
//2.1创建子类1
class Cat extends Animal{
    //4.1添加子类重写后的方法
    @Override
    public void eat(){
        System.out.println("小猫爱吃小鱼干~");
    }
    //5.1添加子类的特有功能
    public void jump(){
        System.out.println("小猫跳的老高啦~");
    }
}
//2.2创建子类2
class Dog extends Animal{
    //4.2添加子类重写后的方法
    @Override
    public void eat(){
        System.out.println("小狗爱吃肉骨头~");
    }
    //5.2添加子类的特有功能
    public void run(){
        System.out.println("小狗跑的老快啦~");
    }
}